package com.nexfra.vocsys.common.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;

import com.nexfra.vocsys.common.exception.GenericException;

@ControllerAdvice
public class DefaultExceptionController {

	private static final Logger logger = LoggerFactory.getLogger(DefaultExceptionController.class);

	// 이 핸들러메소드는 ajax호출시 success 콜백에서 처리해야 한다.
	/*@ExceptionHandler(GenericException.class)
	@ResponseBody
	public Exception handleGenericException(GenericException ex) {
		return ex;
	}*/
	
	// 이 핸들러메소드는 ajax호출시 error 콜백에서 처리해야 한다.
    /**
     * GenericException 유형의 예외 발생시 처리하는 메소드
     *
     * @param class GenericException class
     * @return Exception object
     */
	@ExceptionHandler(GenericException.class)
	@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
	@ResponseBody
	public Exception handleGenericException(GenericException ex) {
		return ex;
	}
	
	// 이 핸들러메소드는 ajax호출시 error 콜백에서 처리해야 한다.
    /**
     * Exception 유형의 예외 발생시 처리하는 메소드.
     * 이 메소드는 Exception객체를 GenericException객체로 wrapping하여 리턴한다.
     *
     * @param class GenericException class
     * @return Exception object
     */
	@ExceptionHandler(Exception.class)
	@ResponseStatus(value = HttpStatus.INTERNAL_SERVER_ERROR)
	@ResponseBody
	public Exception handleException(Exception ex) {
		return new GenericException(ex.getMessage(), ex);
	}	
}